#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

bool checkValidString(string s) {
    int low = 0;//左括号最少数量
    int high = 0;//左括号最大数量

    for (int i = 0; i < s.size(); ++i) {
        if (s[i] == '(') {
            low++;
            high++;
        } else if (s[i] == ')') {
            //右括号需要匹配就删除
            low--;
            high--;
        } else {
            //否则是*号的
            low--;
            high++;
            //扩大区间了
        }
    }

    //左括号不能是负数
    low = max(low, 0);

    // 这种情况其实发生在r本身是负数的时候，也就是我们常见的右括号太多了
    if (low > high)
        return false;

// 必须要等于0
    return low == 0;
}
